package com.cskaoyan.javase.array._1use._1initialization;

/**
 * 数组的初始化
 * 类比于之前说的局部变量的初始化,初始化实际上就是一个赋值的过程
 * 但是对于数组而言,不能只管赋值,需要明确以下两点:
 *      1.数组的长度必须明确,这样才能正常开辟数组存储单元.
 *      2.数组的每个存储单元的取值,也必须要明确.
 * 以上两点,缺一不可.
 *
 * (一维)数组初始化的两种方式:
 *
 *  1.静态初始化,指的是直接给出数组中所有元素的取值,数组的长度间接给出.
 *      语法:
 *      数据类型[] 数组名 = new 数据类型[]{元素1,元素2...};
 *      注: 左右的数据类型要求保持一致.
 *
 *      静态初始化可以简写成:
 *      数据类型[] 数组名 = {元素1,元素2...};
 *      注:
 *          a.简化形式只是简化了new关键字,它仍然存在.
 *          b.静态初始化的简写形式,必须和声明写在一起,不能采取下面的方式:
 *              数组名 = {元素1,元素2...}; (错误的)
 *
 *  2.动态初始化,指的是直接给出数组的长度,而不给出数组元素的取值.
 *      语法:
 *      数据类型[] 数组名 = new 数据类型[长度];
 *      注: 这里的长度必须是一个大于等于0的整数,而且不能超出int的取值范围.
 *          动态初始化并没有直接给出数组中每个存储单元的元素取值,而是由JVM默认给出,称之为"默认值"
 *
 *
 * 以上，就是数组的两种初始化方式，（一维）数组没有第三种初始化的方式，比如：
 *      典型错误就是"动静结合"
 *
 * @since 11:12
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 静态初始化一个长度为0的int数组
        int[] arr = new int[]{};
        // 静态初始化一个double数组
        double[] arr2 = new double[]{1, 'a', 3};
        // 静态初始化的简写形式
        String[] arr3 = {"123", "456", "789"};
        // arr3 = {"123"};

        // 动态初始化一个长度为3的int数组
        int[] arr4 = new int[3];

        // 动静结合 典型错误
        // int[] arr5 = new int[3]{1,2,3};
    }
}
